#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H

#include <ros/ros.h>
#include <QtWidgets/QMainWindow>
#include <memory>
#include <QtCharts/QtCharts>

#include "ui_main_window.h"
#include "module/edit_camera_parameters.h"
#include "module/edit_calibration_parameters.h"

namespace camera_calibration {
/**
 * @brief Qt central, all operations relating to the view part here.
 */
class MainWindow : public QMainWindow {
  Q_OBJECT

 public:
  /**
   * @brief 构造函数
   * @param parent
   */
  MainWindow(QWidget* parent = 0);

  /**
   * @brief 析构函数
   */
  ~MainWindow();

  /**
   * @brief 信号槽连接函数
   */
  void SignalSlotConnection();

  /**
   * @brief 清除所有的process进程
   */
  void KillAllprocess();


 private slots:
  /**
   * @brief 打开相机
   */
  void SlotStartCamera();

  /**
   * @brief 设置相机默认参数
   */
  void SlotSetCameraDefaultParamenters();

  /**
   * @brief 设置棋盘格默认参数
   */
  void SlotSetGridDefaultParamenters();

  /**
   * @brief 设置标定程序运行参数
   */
  void SlotSetRunparameters();

  /**
   * @brief 生成ost文件
   */
  void SlotGenerateFile();

  /**
   * @brief 设置返回功能
   */
  void SlotGoBack();

  /**
   * @brief 设置关闭程序功能
   */
  void SlotCloseApps();

  /**
   * @brief 记录密码
   * @param _text
   */
  void SlotRecodePassword(const QString &_text);

  /**
   * @brief 设置一键安装功能
   */
  void SlotOneClickInstall();

 signals:

 private:
  Ui::MainWindowDesign* ui;

  /// 创建编辑相机对象
  EditCameraParamenters* edit_canera_;
  /// 创建编辑标定对象
  EditCalibrationParameters* edit_calibration_;

  /// 启动相机指令
  QProcess* usb_cam_command_;
  /// 启动标定指令
  QProcess* calibration_command_;
  /// 启动解压指令
  QProcess* tar_command_;
  /// 启动一键安装指令
  QProcess* one_click_install_command_;

  /// 用户密码
  QString user_password_;

};

}  // namespace camera_calibration

#endif  // MAIN_WINDOW_H
